<?php
/**
 * @APP@
 *
 * @package Page
 */
require_once 'App.php';

/**
 * ユーザー情報変更
 *
 * ユーザー情報を変更します。タブでプロフィール、パスワード、画像と変更できるフォームがかわります。
 *
 * @package Page
 * @author  $Author:$
 * @version SVN: Release: $Id:$
 */
class Page_User_Update extends App_Page
{
    /**
     * @var array
     */
    private $_img = array('adaptor'=>BEAR_Img::ADAPTOR_GD);

    /**
     * インジェクト
     *
     * @return void
     */
    public function onInject()
    {
        parent::onInject();
        $this->injectGet('tab', 'tab', 'user');
    }

    /**
     * 初期化
     *
     * @param array $args
     * @return void
     */
    public function onInit(array $args)
    {
        $tab = (isset($args['tab'])) ? $args['tab'] : '';
        $params = array('uri' => 'User', 'values' => array('id' => $args['auth']['id']));
        $owner = $this->_resource->read($params)->link('profile')->getBody(true);
        switch ($tab) {
            case 'password' :
                BEAR::dependency('App_Form_User_Password')->build();
                break;
            case 'icon' :
                BEAR::dependency('App_Form_User_Image')->build($owner);
                break;
            case 'profile':
            default :
                BEAR::dependency('App_Form_User_Profile', array(), array('injector'=>array('BEAR_Agent_Injector', 'inject')))->build($owner);
                ;
                break;
        }
    }

    /**
     * プロフィール情報変更アクション
     *
     * @param array $submit サブミット値
     * @return void
     */
    public function onActionProfileForm(array $submit)
    {
        $submit['id'] = $this->_auth['id'];
        $params = array('uri' => 'User', 'values' => $submit);
        $result = $this->_resource->update($params);
        if ($result) {
            $this->set('msg', '変更しました');
        } else {
            $this->set('msg_css', 'msg-error'); //エラーの場合
            $this->set('msg', 'エラー発生で変更できませんでした');
        }
        $this->display();
    }

    /**
     * プロフィール情報変更Action
     *
     * @param array $submit サブミット値
     *
     * @return void
     */
    public function onActionPasswordForm(array $submit)
    {
        $id = $this->_auth['id'];
        $values = array();
        $values['id'] = $id;
        $values['user']['password'] = md5($submit['password']);
        $params = array('uri' => 'User', 'values' => $values);
        $result = $this->_resource->update($params);
        if ($result->getCode() == BEAR::CODE_OK) {
            $this->set('msg', '変更しました');
        } else {
            $this->set('msg_css', 'msg-error'); //エラーの場合
            $this->set('msg', 'エラー発生で変更できませんでした');
        }
        $this->display();
    }

    /**
     * ユーザー画像変更アクション
     *
     * @param array $submit
     * @return void
     */
    public function onActionUploadForm(array $submit)
    {
        $tmpFile = $_FILES['filename']['tmp_name'];
        $type = $_FILES['filename']['type'];
        $img = BEAR::dependency('BEAR_Img', $this->_img);
        /* @var $img BEAR_Img_Adaptor */
        $ext = $img->getExtention($type);
        $img->load($tmpFile, $ext);
        $img->resize(48, 48);
        $image = md5($this->_auth['id'] . (string)time());
        $params = array('uri' => 'User', 'values' => array('id'=>$this->_auth['id'], 'user'=>compact("image")));
        $result = $this->_resource->update($params);
        $imgFile = _BEAR_APP_HOME . "/htdocs/image/user/icon/{$image}.gif";
        $img->save($imgFile, 'gif');
        $this->set('is_uploaded', true);
        $this->header->redirect('/user/update.php?tab=icon');
    }
}

App_Main::run('Page_User_Update');